var _classPath = "";
var _id = "";
/**
 * 字段的属性列表
 */
var _global_data_properties = null;//当前模型的属性列表
/**
 * 表的属性
 */
var _global_class_attributes = null;

/**
 * 
 */
var _config={};

/**
 * 
 */
$(window).ready(function () {

    var _path = _apigetquery("path");
    if (_path) {
        _classPath = _path;
    } else {
        log.console.error("参数错误，请携带参数path,注意大小写！");
    }
    var uidstr = _apigetquery("id");//基于主表，可能有不一样的类型 int long string guid 等
    if (uidstr != null) {
        _id = (uidstr);
    }
    FuncFilexModel();
});


/**
 * 读取数据的模型 处理数据的模型
 * @param {*} properties 
 */
function DetailLoadModelProperity(properties) {
    // _global_data_properties = properties;
    DetailhandlerExchangeDataTypeToUIType(properties);


    //处理group模式
    var _ui_data_list = new Array();
    for (var k = 0; k < _global_data_properties.length; k++) {
        var item = _global_data_properties[k];
        if (item.attributes) {
            var _group = funcFindAttribute(item.attributes, "group");
            if (_group) {
                //是初始化，还是新增一个进去?
                handlerTakeGroupInfo(_group.args1, _ui_data_list, item);
            } else {
                _ui_data_list.push(item);
            }
        } else {
            _ui_data_list.push(item);
        }
    }

        //最上方的组描点
        var _ui_tabs = new Array();
        if (_ui_data_list && _ui_data_list.length > 0) {
            if (_ui_data_list[0].isgroup) {
                _ui_data_list.forEach(ia => {
                    if (ia.isgroup) {
                        _ui_tabs.push(ia);
                    }
                });
            }
        }
    // var _template = $("#templatemodel").html();
    // var _ahtml = template(_template, { list: properties });
    // $(".paste-form-body").html(_ahtml);

        //进行多级模板渲染！
        var _template_form = $("#template_form").html();
        var _template_item = $("#template_tr_item").html();
        var _tpl_form = template(_template_form);
        var _tpl_item = template(_template_item);
    
        //以下是新版本
        var _ahtml = _tpl_form({ list: _ui_data_list, templatetr: _tpl_item, config: _config, tabs: _ui_tabs });
        $(".paste-form-body").html(_ahtml);


        if (_ui_data_list && _ui_data_list.length > 0) {
            setTimeout(() => {
                registry_group_click_event();
            }, 100);
        }
}



/**
 * 转化数据类型，从数据库的类型转化为UI使用的类型
 * @param {*} properties 
 */
function DetailhandlerExchangeDataTypeToUIType(properties) {
    properties.forEach(item => {
        item.dataFrom = item.dataType;
        //这里需要处理字段的属性
        if (item.attributes) {
            item.attributes.forEach(_attribute => {

                switch (_attribute.name) {
                    case 'outer': {
                        item.dataType = 'outer';
                        if (_attribute.args2) {
                            var _target = funcFindPropertry(_attribute.args2);
                            if (_target) {
                                if (_target.value) {
                                    if (typeof _target.value == "object") {
                                        if (_attribute.args4) {
                                            item.value = _target.value[_attribute.args4];
                                        }
                                    }
                                }
                            }
                        }
                        break;
                    }
                    case 'outers': {
                        item.dataType = 'outers';
                        if (_attribute.args2) {
                            var _target = funcFindPropertry(_attribute.args2);
                            if (_target) {
                                if (_target.value) {
                                    item.display = _target.value;
                                }
                            }
                        }
                        item.display_id = _attribute.args3;
                        item.display_name = _attribute.args4;
                        break;
                    }
                    case 'lselect':
                    case 'select':
                    case 'selects':
                    case 'datalist': {
                        try {
                            item.dataType = 'select';
                            item.selects = JSON.parse(_attribute.args1);
                            if (Array.isArray(item.value)) {
                                item.value = item.value.map(val => {
                                    const selectedItem = item.selects.find(ii => ii.value === val);
                                    return selectedItem ? selectedItem.name : val;
                                }).join(',');
                            } else {
                                const selectedItem = item.selects.find(ii => ii.value === item.value);
                                item.value = selectedItem ? selectedItem.name : item.value;
                            }
                        } catch (err) {
                            console.log(item.name, `属性 ${_attribute.name} 的值 args1 配置错误`, err);
                        }
                        break;
                    }
                    case 'hidden': {
                        item.hidden = true;
                        break;
                    }
                    case 'image': {
                        item.dataType = 'image';
                        if (_attribute.args1) {
                            item.num = parseInt(_attribute.args1);
                        } else {
                            item.num = 1;
                        }
                        if (_attribute.args2) {
                            item.type = _attribute.args2;
                        }
                        if (_attribute.args3) {
                            item.size = _attribute.args3;
                        }
                        break;
                    }
                    case 'head': {
                        item.dataType = 'head';
                        if (_attribute.args1) {
                            item.num = parseInt(_attribute.args1);
                        } else {
                            item.num = 1;
                        }
                        if (_attribute.args2) {
                            item.type = _attribute.args2;
                        }
                        if (_attribute.args3) {
                            item.size = _attribute.args3;
                        }
                        break;
                    }
                    case "display":
                        {
                            var _args ="name";
                            if(_attribute.args1){
                                _args = _attribute.args1;
                            }
                            let _val =item.value;
                            if(_val){
                                if (typeof _val == "object") {
                                    if (_val[_args]) {
                                        item.value = _val[_args];
                                    }
                                }
                            }
                        }
                        break;
                    case 'daterange': {
                        item.dataType = "daterange";
                        var _start = "";
                        var _end = "";
                        if (_attribute.args1 == item.name) {
                            _start = item.value;
                        } else {
                            if (_attribute.args1) {
                                var _args1obj = funcFindPropertry(_attribute.args2);
                                if (_args1obj) {
                                    if (_args1obj.value) {
                                        _start = _args1obj.value;
                                    }
                                }
                            }
                        }
                        if (_start && _attribute.args2) {
                            var _args1obj = funcFindPropertry(_attribute.args2);
                            if (_args1obj) {
                                if (_args1obj.value) {
                                    _end = _args1obj.value;
                                    var _fulldate = `${new Date(_start).Format('yyyy - MM - dd')}  至  ${new Date(_end).Format('yyyy - MM - dd')}`;
                                    item.value = _fulldate;
                                }
                            }
                        }
                        break;
                    }
                    case 'textarea': {
                        item.dataType = "textarea";
                        item.maxlength = 5000;
                        item.singlerow = true;
                        break;
                    }
                    case 'text': {
                        item.dataType = "text";
                        break;
                    }
                    case "fentoyuan": {
                        if (item.value) {
                            item.value = Math.round(parseFloat(item.value) / 100).toFixed(2);
                        }
                        item.dataType = "fentoyuan";
                        break;
                    }
                    case "sunform":
                        {
                            if(item.value) {
                                item.value = traverse(item.value);
                            }
                            item.dataType="sunform";
                        }
                        break;
                }    

              
            });
        }

        //如果是故意要暴露id的呢？
        if (item.name == "id") {
            if (!item.required) {
                item.hidden = true;
            }
        }

        switch (item.dataType) {
            case "Int32":
            case "Int64": {
                item.dataType = "number";
                if (item.value === "0") {
                    item.value = "";
                }
                break;
            }
            case "DateTime": {
                item.dataType = "datetime";
                if (item.value && item.value === '01/01/0001 00:00:00') {
                    item.value = "";
                }
                if (!item.format) {
                    item.format = "yyyy-MM-dd HH:mm:ss";
                }
                break;
            }
            case "Boolean": {
                item.dataType = "switch";
                break;
            }
            case "Double": {
                item.step = "0.01";
                if (item.attributes) {
                    item.attributes.forEach(_attribute => {
                        if (_attribute.name === 'double') {
                            item.step = _attribute.args1;
                        }
                    });
                }
                break;
            }
            case "String": {
                if (item.value === null) {
                    item.value = "";
                }
                if (item.maxlength === 0) {
                    item.dataType = "richtext";
                    item.singlerow = true;
                }
                if (item.maxlength >= 128) {
                    item.dataType = "textarea";
                    item.singlerow = true;
                }
                if (item.maxlength < 128 && item.maxlength!== 0) {
                    item.dataType = "text";
                }
                break;
            }
            case "image": {
                item.singlerow = true;
                break;
            }
        }  

        // if (item.dataType == "Int32" || item.dataType == "Int64") {
        //     item.dataType = "number";
        //     if (item.value == "0") {
        //         item.value = "";
        //     }
        // }
        // if (item.dataType == "DateTime") {
        //     item.dataType = "datetime";
        //     if (item.value && item.value == '01/01/0001 00:00:00') {
        //         item.value = "";
        //     }
        //     if (!item.format) {
        //         item.format = "yyyy-MM-dd HH:mm:ss";
        //     }
        // }
        // if (item.dataType == "Boolean") {
        //     item.dataType = "switch";
        // }
        // if (item.dataType == 'Double') {
        //     item.step = "0.01";
        //     if (item.attributes) {
        //         item.attributes.forEach(_attribute => {
        //             if (_attribute.name == 'double') {
        //                 item.step = _attribute.args1;
        //             }
        //         });
        //     }
        // }
        // if (item.dataType == "String") {
        //     if (item.value == null) {
        //         item.value = "";
        //     }
        //     if (item.maxlength == 0) {
        //         item.dataType = "richtext";
        //         item.singlerow = true;
        //     }
        //     if (item.maxlength >= 128) {
        //         item.dataType = "textarea";
        //         item.singlerow = true;
        //     }
        //     if (item.maxlength < 128 && item.maxlength != 0) {
        //         item.dataType = "text";
        //     }
        // }
        // if (item.dataType == "image") {
        //     item.singlerow = true;
        // }
        if (item.hidden) {
            if (item.required) {
                item.required = false;
            }
        }

    });

    _global_data_properties = properties.filter(item => {
        return item.value!=null;
    });
}

/**
 * 解析sunform的值
 * @param {*} obj 
 * @returns 
 */
function traverse(obj) {
    let result = "";
    if (Array.isArray(obj)) {
        for (let i = 0; i < obj.length; i++) {
            if (typeof obj[i] === 'object' && obj[i]!== null) {
                result += `${i}: ${traverse(obj[i])}<br>`;
            } else {
                result += `${i}: ${obj[i]}<br>`;
            }
        }
    } else if (typeof obj === 'object' && obj!== null) {
        for (const key in obj) {
            if (obj.hasOwnProperty(key)) {
                result += `${key}: ${obj[key]} `;
            }
        }
    }
    return result;
}


/**
 * 读取模型和默认值，值等
 */
function FuncFilexModel() {
    _apiget(`${auto_path()}/${_id}/readDetailModel`, true, (c, o) => {
        if (c == 200) {
            // loadHeader(o);

            if(o.attributes){
                _global_class_attributes = o.attributes;
            }

            if (o.properties) {
                DetailLoadModelProperity(o.properties);
            }
            if (o.title) {
                this.document.title = "查看" + o.title;
            }
        }
    });
}
